function add(a, b) {
  return a + b;
}

/* 同步函数的Promise化 */
// function promisify(fn){
//   // add进去 padd出来
//   return function(...args){
//     return new Promise(
//       (resolve,reject)=>{
//         const ret = fn(...args)
//         resolve(ret)
//       }
//     )
//   }
// }

// const padd = promisify(add)
// padd(2,3).then(
//   value => console.log("value=",value)
// )

function multiply(a, b, callback) {
  setTimeout(() => callback(a * b), 1000);
}
// multiply(2, 3, (ret) => console.log("ret=", ret));

/* 异步函数的Promise化 */
function promisify(fn) {
  // mul进去 pmul出来
  // add进去 padd出来
  return function (...args) {
    return new Promise((resolve, reject) => {
      try {
        const ret = fn(...args, (...a) => resolve(a));
        ret && resolve(ret);
      } catch (err) {
        reject(err);
      }
    });
  };
}

/* 同步返回函数的Promise化 */
// const padd = promisify(add)
// padd(2,3).then(
//   value => console.log("value=",value)
// )

/* 异步回调函数的Promise化 */
const pmul = promisify(multiply);
pmul(2, 3)
  .then((values) => {
    console.log("value=", values);
    return pmul(values[0], 4);
  })
  .then((values) => {
    console.log("value=", values);
    return pmul(values[0], 5);
  })
  .then((values) => console.log(values[0]));
